API: Add gtk_widget_path_iter_set_state()
authorBenjamin Otte <otte@redhat.com>
Fri, 18 Jul 2014 18:07:27 +0000 (20:07 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 19 Jul 2014 21:42:38 +0000 (23:42 +0200)
And the corresponding gtk_widget_path_iter_get_state().

docs/reference/gtk/gtk3-sections.txt
gtk/gtkwidgetpath.c
gtk/gtkwidgetpath.h

index daada859e4f7b9e5caae583b9575e5bf10c05a0a..b2a773adf143605c3e286e5703becacb1a298116 100644 (file)
@@ -5871,6 +5871,7 @@ gtk_widget_path_iter_get_name
 gtk_widget_path_iter_get_object_type
 gtk_widget_path_iter_get_siblings
 gtk_widget_path_iter_get_sibling_index
+gtk_widget_path_iter_get_state
 gtk_widget_path_iter_has_class
 gtk_widget_path_iter_has_name
 gtk_widget_path_iter_has_qclass
@@ -5883,6 +5884,7 @@ gtk_widget_path_iter_remove_class
 gtk_widget_path_iter_remove_region
 gtk_widget_path_iter_set_name
 gtk_widget_path_iter_set_object_type
+gtk_widget_path_iter_set_state
 gtk_widget_path_length
 gtk_widget_path_new
 gtk_widget_path_prepend_type
index 221e93ce61c89d0c9cfe5580ca406b206c5d3932..40d29721e08d7a4f9094698e6b80a19da5474ce4 100644 (file)
@@ -88,6 +88,7 @@ struct GtkPathElement
 {
   GType type;
   GQuark name;
+  GtkStateFlags state;
   guint sibling_index;
   GHashTable *regions;
   GArray *classes;
@@ -572,6 +573,80 @@ gtk_widget_path_iter_set_object_type (GtkWidgetPath *path,
   elem->type = type;
 }
 
+/**
+ * gtk_widget_path_iter_get_state:
+ * @path: a #GtkWidgetPath
+ * @pos: position to get the state for, -1 for the path head
+ *
+ * Returns the state flags corresponding to the widget found at
+ * the position @pos in the widget hierarchy defined by
+ * @path
+ *
+ * Returns: The state flags
+ *
+ * Since: 3.14
+ **/
+GtkStateFlags
+gtk_widget_path_iter_get_state (const GtkWidgetPath *path,
+                                gint                 pos)
+{
+  GtkPathElement *elem;
+
+  g_return_val_if_fail (path != NULL, 0);
+  g_return_val_if_fail (path->elems->len != 0, 0);
+
+  if (pos < 0 || pos >= path->elems->len)
+    pos = path->elems->len - 1;
+
+  elem = &g_array_index (path->elems, GtkPathElement, pos);
+  return elem->state;
+}
+
+/**
+ * gtk_widget_path_iter_set_state:
+ * @path: a #GtkWidgetPath
+ * @pos: position to modify, -1 for the path head
+ * @state: state flags
+ *
+ * Sets the widget name for the widget found at position @pos
+ * in the widget hierarchy defined by @path.
+ *
+ * If you want to update just a single state flag, you need to do
+ * this manually, as this function updates all state flags.
+ *
+ * ## Setting a flag
+ *
+ * |[<!-- language="C" -->
+ * gtk_widget_path_iter_set_state (path, pos, gtk_widget_path_iter_get_state (path, pos) | flag);
+ * ]|
+ *
+ * ## Unsetting a flag
+ *
+ * |[<!-- language="C" -->
+ * gtk_widget_path_iter_set_state (path, pos, gtk_widget_path_iter_get_state (path, pos) & ~flag);
+ * ]|
+ *
+ *
+ * Since: 3.14
+ **/
+void
+gtk_widget_path_iter_set_state (GtkWidgetPath *path,
+                                gint           pos,
+                                GtkStateFlags  state)
+{
+  GtkPathElement *elem;
+
+  g_return_if_fail (path != NULL);
+  g_return_if_fail (path->elems->len != 0);
+
+  if (pos < 0 || pos >= path->elems->len)
+    pos = path->elems->len - 1;
+
+  elem = &g_array_index (path->elems, GtkPathElement, pos);
+
+  elem->state = state;
+}
+
 /**
  * gtk_widget_path_iter_get_name:
  * @path: a #GtkWidgetPath
index 7a705572aa497b0a23d9d76ad9c98a47b28fb142..f1f7ad7a6a3e788276487b8c9b3c885b5a7c72ee 100644 (file)
@@ -95,6 +95,13 @@ GDK_AVAILABLE_IN_ALL
 gboolean               gtk_widget_path_iter_has_qname (const GtkWidgetPath *path,
                                                        gint                 pos,
                                                        GQuark               qname);
+GDK_AVAILABLE_IN_3_14
+GtkStateFlags          gtk_widget_path_iter_get_state (const GtkWidgetPath *path,
+                                                       gint                 pos);
+GDK_AVAILABLE_IN_3_14
+void                   gtk_widget_path_iter_set_state (GtkWidgetPath       *path,
+                                                       gint                 pos,
+                                                       GtkStateFlags        state);
 
 GDK_AVAILABLE_IN_ALL
 void     gtk_widget_path_iter_add_class     (GtkWidgetPath       *path,